#ifndef INTERACTION_CPP
#define INTERACTION_CPP

#include "object.h"
#include "eg.h"
#include "snake.h"
#include "wall.h"
#include <list>

using namespace std;

void wall_snake_reflect (Object *wall , Object *snake);
void wall_eg (Object *wall , Object *eg);
void snake_eg (Object *snake , Object *eg);
void snake_snake_eat (Object *snake , Object *snakE);

void Interaction (Object* a , Object* b) {
    // int Ta = a -> get_type() , Tb = b -> get_type() ;
    // if (Ta == 2 && Tb == 0) wall_snake_reflect (a , b);
    // if (Ta == 2 && Tb == 3) wall_snake_reflect (a , b);
    // if (Ta == 2 && Tb == 1) wall_eg (a , b);
    // if (Ta == 0 && Tb == 1) snake_eg (a , b);

    /*if (Ta == 0 && Tb == 0) snake_snake_eat (a , b);
 if (Ta == 0 && Tb == 3) snake_snake_eat (a , b);
 if (Ta == 3 && Tb == 0) snake_snake_eat (a , b);
 if (Ta == 3 && Tb == 3) snake_snake_eat (a , b);*/
}

//void wall_snake_reflect (Object *wall , Object *snake) {
// int Hx = wall -> get_x () , Hy = wall -> get_y ();
// int length = ((Wall *)wall) -> get_length () , way = ((Wall *)wall) -> get_way ();
// int snake_x = snake -> get_x (), snake_y = snake -> get_y () , i = 0 ;
// while (i != length) {

//  if (way == 0) Hy --;
//  if (way == 1) Hx ++;
//  if (way == 2) Hy ++;
//  if (way == 3) Hx --;

//  if (Hx == snake_x && Hy == snake_y){
//   ((Snake *)snake) -> stone_on ();
//   ((Snake *)snake) -> new_way ();
//   return ;
//  }

//  i ++;
// }
// ((Snake *)snake) -> stone_off ();
//}

//void wall_eg (Object *wall , Object *eg) {
// int Hx = wall -> get_x () , Hy = wall -> get_y ();
// int length = ((Wall *)wall) -> get_length () , way = ((Wall *)wall) -> get_way ();
// int eg_x = eg -> get_x (), eg_y = eg -> get_y () , i = 0 ;
//  while (i != length) {

//  if (way == 0) Hy --;
//  if (way == 1) Hx ++;
//  if (way == 2) Hy ++;
//  if (way == 3) Hx --;

//  if (Hx == eg_x && Hy == eg_y){
//   ((Eg *)eg) -> new_way ();
//   return ;
//  }
//  i ++;
// }
//}

//void snake_eg (Object *snake , Object *eg){
// int snake_x = snake -> get_x () , snake_y = snake -> get_y ();
// int eg_x = eg -> get_x () , eg_y = eg -> get_y ();
// if (snake_x == eg_x && snake_y == eg_y) {
//  ((Snake *)snake) -> inc_length ();
//  ((Eg *)eg) -> rand_position ();
// }
//}

//void snake_snake_eat (Object *snake , Object *snakE) {
// int head_x = snake -> get_x () , head_y = snake -> get_y ();
// int x = snakE -> get_x () , y = snakE -> get_y ();
// int length = ((Snake *)snakE) -> get_length () , i = 0;
// while (i != length) {

//  if ( ((Snake *)snakE) -> get_mas(i) == 0 ) y --;
//  if ( ((Snake *)snakE) -> get_mas(i) == 1 ) x ++;
//  if ( ((Snake *)snakE) -> get_mas(i) == 2 ) y ++;
//  if ( ((Snake *)snakE) -> get_mas(i) == 3 ) y --;

//  if (x == head_x && y == head_y){
//   //((Snake *)snakE) -> clear ();
//   ((Snake *)snake) -> change_length (i);
//   return;
//  }
//  i ++;
// }
//}

#endif
